{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Keras ResNet classifier for CIFAR10 test\n",
    "ResNet network for CIFAR10 network test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import keras\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Activation\n",
    "from data_utils import *\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "import tensorflow as tf \n",
    "from keras import backend as k\n",
    "import os\n",
    "config = tf.ConfigProto()\n",
    "# config.gpu_options.per_process_gpu_memory_fraction = 0.1\n",
    "config.gpu_options.allow_growth = True\n",
    "k.tensorflow_backend.set_session(tf.Session(config=config))\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CIFAR10 Training data shape: (50000, 32, 32, 3)\n",
      "CIFAR10 Training label shape (50000, 1)\n",
      "CIFAR10 Test data shape (10000, 32, 32, 3)\n",
      "CIFAR10 Test label shape (10000, 1)\n"
     ]
    }
   ],
   "source": [
    "# get data\n",
    "cifar10_data = CIFAR10Data()\n",
    "x_train, y_train, x_test, y_test = cifar10_data.get_data(subtract_mean=True)\n",
    "\n",
    "num_train = int(x_train.shape[0] * 0.8)\n",
    "num_val = x_train.shape[0] - num_train\n",
    "mask = list(range(num_train, num_train+num_val))\n",
    "x_val = x_train[mask]\n",
    "y_val = y_train[mask]\n",
    "\n",
    "mask = list(range(num_train))\n",
    "x_train = x_train[mask]\n",
    "y_train = y_train[mask]\n",
    "\n",
    "data = (x_train, y_train, x_val, y_val, x_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Test with ResNet18\n",
    "the resnet18 is modified with the standard resnet18 architecture."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_2 (InputLayer)            (None, 32, 32, 3)    0                                            \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_21 (Conv2D)              (None, 32, 32, 64)   1728        input_2[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_21 (BatchNo (None, 32, 32, 64)   256         conv2d_21[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_18 (Activation)      (None, 32, 32, 64)   0           batch_normalization_21[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_22 (Conv2D)              (None, 32, 32, 64)   36864       activation_18[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_22 (BatchNo (None, 32, 32, 64)   256         conv2d_22[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_19 (Activation)      (None, 32, 32, 64)   0           batch_normalization_22[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_23 (Conv2D)              (None, 32, 32, 64)   36864       activation_19[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_23 (BatchNo (None, 32, 32, 64)   256         conv2d_23[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_9 (Add)                     (None, 32, 32, 64)   0           activation_18[0][0]              \n",
      "                                                                 batch_normalization_23[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_20 (Activation)      (None, 32, 32, 64)   0           add_9[0][0]                      \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_24 (Conv2D)              (None, 32, 32, 64)   36864       activation_20[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_24 (BatchNo (None, 32, 32, 64)   256         conv2d_24[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_21 (Activation)      (None, 32, 32, 64)   0           batch_normalization_24[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_25 (Conv2D)              (None, 32, 32, 64)   36864       activation_21[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_25 (BatchNo (None, 32, 32, 64)   256         conv2d_25[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_10 (Add)                    (None, 32, 32, 64)   0           activation_20[0][0]              \n",
      "                                                                 batch_normalization_25[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_22 (Activation)      (None, 32, 32, 64)   0           add_10[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_27 (Conv2D)              (None, 16, 16, 128)  73728       activation_22[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_27 (BatchNo (None, 16, 16, 128)  512         conv2d_27[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_23 (Activation)      (None, 16, 16, 128)  0           batch_normalization_27[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_26 (Conv2D)              (None, 16, 16, 128)  8192        activation_22[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_28 (Conv2D)              (None, 16, 16, 128)  147456      activation_23[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_26 (BatchNo (None, 16, 16, 128)  512         conv2d_26[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_28 (BatchNo (None, 16, 16, 128)  512         conv2d_28[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_11 (Add)                    (None, 16, 16, 128)  0           batch_normalization_26[0][0]     \n",
      "                                                                 batch_normalization_28[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_24 (Activation)      (None, 16, 16, 128)  0           add_11[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_29 (Conv2D)              (None, 16, 16, 128)  147456      activation_24[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_29 (BatchNo (None, 16, 16, 128)  512         conv2d_29[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_25 (Activation)      (None, 16, 16, 128)  0           batch_normalization_29[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_30 (Conv2D)              (None, 16, 16, 128)  147456      activation_25[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_30 (BatchNo (None, 16, 16, 128)  512         conv2d_30[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_12 (Add)                    (None, 16, 16, 128)  0           activation_24[0][0]              \n",
      "                                                                 batch_normalization_30[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_26 (Activation)      (None, 16, 16, 128)  0           add_12[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_32 (Conv2D)              (None, 8, 8, 256)    294912      activation_26[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_32 (BatchNo (None, 8, 8, 256)    1024        conv2d_32[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_27 (Activation)      (None, 8, 8, 256)    0           batch_normalization_32[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_31 (Conv2D)              (None, 8, 8, 256)    32768       activation_26[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_33 (Conv2D)              (None, 8, 8, 256)    589824      activation_27[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_31 (BatchNo (None, 8, 8, 256)    1024        conv2d_31[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_33 (BatchNo (None, 8, 8, 256)    1024        conv2d_33[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_13 (Add)                    (None, 8, 8, 256)    0           batch_normalization_31[0][0]     \n",
      "                                                                 batch_normalization_33[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_28 (Activation)      (None, 8, 8, 256)    0           add_13[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_34 (Conv2D)              (None, 8, 8, 256)    589824      activation_28[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_34 (BatchNo (None, 8, 8, 256)    1024        conv2d_34[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_29 (Activation)      (None, 8, 8, 256)    0           batch_normalization_34[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_35 (Conv2D)              (None, 8, 8, 256)    589824      activation_29[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_35 (BatchNo (None, 8, 8, 256)    1024        conv2d_35[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_14 (Add)                    (None, 8, 8, 256)    0           activation_28[0][0]              \n",
      "                                                                 batch_normalization_35[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_30 (Activation)      (None, 8, 8, 256)    0           add_14[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_37 (Conv2D)              (None, 4, 4, 512)    1179648     activation_30[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_37 (BatchNo (None, 4, 4, 512)    2048        conv2d_37[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_31 (Activation)      (None, 4, 4, 512)    0           batch_normalization_37[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_36 (Conv2D)              (None, 4, 4, 512)    131072      activation_30[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_38 (Conv2D)              (None, 4, 4, 512)    2359296     activation_31[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_36 (BatchNo (None, 4, 4, 512)    2048        conv2d_36[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_38 (BatchNo (None, 4, 4, 512)    2048        conv2d_38[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_15 (Add)                    (None, 4, 4, 512)    0           batch_normalization_36[0][0]     \n",
      "                                                                 batch_normalization_38[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_32 (Activation)      (None, 4, 4, 512)    0           add_15[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_39 (Conv2D)              (None, 4, 4, 512)    2359296     activation_32[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_39 (BatchNo (None, 4, 4, 512)    2048        conv2d_39[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "activation_33 (Activation)      (None, 4, 4, 512)    0           batch_normalization_39[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "conv2d_40 (Conv2D)              (None, 4, 4, 512)    2359296     activation_33[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "batch_normalization_40 (BatchNo (None, 4, 4, 512)    2048        conv2d_40[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "add_16 (Add)                    (None, 4, 4, 512)    0           activation_32[0][0]              \n",
      "                                                                 batch_normalization_40[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "activation_34 (Activation)      (None, 4, 4, 512)    0           add_16[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "average_pooling2d_2 (AveragePoo (None, 1, 1, 512)    0           activation_34[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "flatten_2 (Flatten)             (None, 512)          0           average_pooling2d_2[0][0]        \n",
      "__________________________________________________________________________________________________\n",
      "dense_2 (Dense)                 (None, 10)           5130        flatten_2[0][0]                  \n",
      "==================================================================================================\n",
      "Total params: 11,183,562\n",
      "Trainable params: 11,173,962\n",
      "Non-trainable params: 9,600\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "from classifiers.ResNet import ResNet18\n",
    "from keras import losses\n",
    "from keras import optimizers\n",
    "\n",
    "weight_decay = 1e-4\n",
    "lr = 1e-1\n",
    "num_classes = 10\n",
    "resnet18 = ResNet18(input_shape=(32, 32, 3), classes=num_classes, weight_decay=weight_decay)\n",
    "opt = optimizers.SGD(lr=lr, momentum=0.9, nesterov=False)\n",
    "resnet18.compile(optimizer=opt,\n",
    "                 loss=losses.categorical_crossentropy,\n",
    "                 metrics=['accuracy'])\n",
    "resnet18.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train with data augmentation\n",
      "Epoch 1/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 66s 211ms/step - loss: 2.9463 - acc: 0.2283 - val_loss: 2.7227 - val_acc: 0.2575\n",
      "Epoch 2/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 2.4275 - acc: 0.3359 - val_loss: 2.4775 - val_acc: 0.2999\n",
      "Epoch 3/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 2.1218 - acc: 0.4174 - val_loss: 1.9242 - val_acc: 0.4655\n",
      "Epoch 4/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 50s 161ms/step - loss: 1.7927 - acc: 0.5057 - val_loss: 1.7420 - val_acc: 0.5233\n",
      "Epoch 5/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 1.5642 - acc: 0.5825 - val_loss: 1.4905 - val_acc: 0.6082\n",
      "Epoch 6/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 1.3727 - acc: 0.6454 - val_loss: 1.3739 - val_acc: 0.6371\n",
      "Epoch 7/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 162ms/step - loss: 1.2312 - acc: 0.6866 - val_loss: 1.3499 - val_acc: 0.6598\n",
      "Epoch 8/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 1.1006 - acc: 0.7291 - val_loss: 1.1930 - val_acc: 0.7063\n",
      "Epoch 9/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 162ms/step - loss: 0.9979 - acc: 0.7622 - val_loss: 1.0902 - val_acc: 0.7408\n",
      "Epoch 10/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.9196 - acc: 0.7845 - val_loss: 1.0721 - val_acc: 0.7472\n",
      "Epoch 11/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.8613 - acc: 0.8029 - val_loss: 0.9303 - val_acc: 0.7787\n",
      "Epoch 12/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 50s 160ms/step - loss: 0.8046 - acc: 0.8190 - val_loss: 0.8872 - val_acc: 0.7860\n",
      "Epoch 13/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.7613 - acc: 0.8324 - val_loss: 0.9705 - val_acc: 0.7749\n",
      "Epoch 14/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 163ms/step - loss: 0.7241 - acc: 0.8453 - val_loss: 0.8794 - val_acc: 0.7989\n",
      "Epoch 15/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 50s 160ms/step - loss: 0.6858 - acc: 0.8542 - val_loss: 1.0260 - val_acc: 0.7546\n",
      "Epoch 16/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.6618 - acc: 0.8615 - val_loss: 0.8704 - val_acc: 0.8047\n",
      "Epoch 17/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 0.6381 - acc: 0.8708 - val_loss: 0.7916 - val_acc: 0.8286\n",
      "Epoch 18/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 50s 161ms/step - loss: 0.6100 - acc: 0.8781 - val_loss: 0.7354 - val_acc: 0.8394\n",
      "Epoch 19/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 0.5979 - acc: 0.8834 - val_loss: 0.7092 - val_acc: 0.8487\n",
      "Epoch 20/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.5849 - acc: 0.8872 - val_loss: 0.7891 - val_acc: 0.8302\n",
      "Epoch 21/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 163ms/step - loss: 0.5719 - acc: 0.8923 - val_loss: 0.7426 - val_acc: 0.8474\n",
      "Epoch 22/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.5582 - acc: 0.8969 - val_loss: 0.6726 - val_acc: 0.8600\n",
      "Epoch 23/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.5489 - acc: 0.9023 - val_loss: 0.6942 - val_acc: 0.8586\n",
      "Epoch 24/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 163ms/step - loss: 0.5323 - acc: 0.9059 - val_loss: 0.8272 - val_acc: 0.8260\n",
      "Epoch 25/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.5309 - acc: 0.9081 - val_loss: 0.7805 - val_acc: 0.8457\n",
      "Epoch 26/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 162ms/step - loss: 0.5235 - acc: 0.9118 - val_loss: 0.8758 - val_acc: 0.8077\n",
      "Epoch 27/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.5105 - acc: 0.9169 - val_loss: 0.8316 - val_acc: 0.8286\n",
      "Epoch 28/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.5095 - acc: 0.9187 - val_loss: 0.7754 - val_acc: 0.8520\n",
      "Epoch 29/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 162ms/step - loss: 0.5032 - acc: 0.9212 - val_loss: 0.7379 - val_acc: 0.8614\n",
      "Epoch 30/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 166ms/step - loss: 0.4976 - acc: 0.9229 - val_loss: 1.3761 - val_acc: 0.7360\n",
      "Epoch 31/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 0.4945 - acc: 0.9265 - val_loss: 0.7061 - val_acc: 0.8624\n",
      "Epoch 32/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 162ms/step - loss: 0.4919 - acc: 0.9278 - val_loss: 0.7985 - val_acc: 0.8429\n",
      "Epoch 33/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 0.4883 - acc: 0.9290 - val_loss: 0.7728 - val_acc: 0.8525\n",
      "Epoch 34/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4879 - acc: 0.9314 - val_loss: 0.7288 - val_acc: 0.8606\n",
      "Epoch 35/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 163ms/step - loss: 0.4828 - acc: 0.9325 - val_loss: 0.8213 - val_acc: 0.8385\n",
      "Epoch 36/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 0.4771 - acc: 0.9353 - val_loss: 0.8781 - val_acc: 0.8437\n",
      "Epoch 37/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 165ms/step - loss: 0.4881 - acc: 0.9339 - val_loss: 0.7285 - val_acc: 0.8684\n",
      "Epoch 38/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 162ms/step - loss: 0.4886 - acc: 0.9338 - val_loss: 0.7945 - val_acc: 0.8504\n",
      "Epoch 39/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4864 - acc: 0.9360 - val_loss: 0.7710 - val_acc: 0.8624\n",
      "Epoch 40/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4760 - acc: 0.9394 - val_loss: 0.7788 - val_acc: 0.8650\n",
      "Epoch 41/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 163ms/step - loss: 0.4692 - acc: 0.9433 - val_loss: 0.7787 - val_acc: 0.8614\n",
      "Epoch 42/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4659 - acc: 0.9442 - val_loss: 1.0055 - val_acc: 0.8195\n",
      "Epoch 43/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4606 - acc: 0.9456 - val_loss: 0.8065 - val_acc: 0.8598\n",
      "Epoch 44/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 50s 160ms/step - loss: 0.4618 - acc: 0.9452 - val_loss: 0.8086 - val_acc: 0.8589\n",
      "Epoch 45/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4635 - acc: 0.9446 - val_loss: 0.7424 - val_acc: 0.8674\n",
      "Epoch 46/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4575 - acc: 0.9478 - val_loss: 0.9977 - val_acc: 0.8234\n",
      "Epoch 47/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 50s 161ms/step - loss: 0.4524 - acc: 0.9493 - val_loss: 0.7320 - val_acc: 0.8757\n",
      "Epoch 48/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 164ms/step - loss: 0.4511 - acc: 0.9508 - val_loss: 0.7545 - val_acc: 0.8704\n",
      "Epoch 49/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 0.4578 - acc: 0.9465 - val_loss: 0.9255 - val_acc: 0.8296\n",
      "Epoch 50/200\n",
      "new lr:1.00e-01\n",
      "313/313 [==============================] - 51s 162ms/step - loss: 0.4547 - acc: 0.9504 - val_loss: 0.8295 - val_acc: 0.8537\n",
      "Epoch 51/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 52s 165ms/step - loss: 0.3983 - acc: 0.9718 - val_loss: 0.6013 - val_acc: 0.9134\n",
      "Epoch 52/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 52s 167ms/step - loss: 0.3586 - acc: 0.9844 - val_loss: 0.5944 - val_acc: 0.9181\n",
      "Epoch 53/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 31s 98ms/step - loss: 0.3456 - acc: 0.9884 - val_loss: 0.5854 - val_acc: 0.9203\n",
      "Epoch 54/200\n",
      "new lr:1.00e-02\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "313/313 [==============================] - 30s 94ms/step - loss: 0.3330 - acc: 0.9910 - val_loss: 0.5863 - val_acc: 0.9203\n",
      "Epoch 55/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 95ms/step - loss: 0.3257 - acc: 0.9922 - val_loss: 0.5810 - val_acc: 0.9215\n",
      "Epoch 56/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 93ms/step - loss: 0.3192 - acc: 0.9933 - val_loss: 0.5819 - val_acc: 0.9226\n",
      "Epoch 57/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.3129 - acc: 0.9943 - val_loss: 0.5725 - val_acc: 0.9242\n",
      "Epoch 58/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 95ms/step - loss: 0.3072 - acc: 0.9948 - val_loss: 0.5761 - val_acc: 0.9239\n",
      "Epoch 59/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.3029 - acc: 0.9951 - val_loss: 0.5767 - val_acc: 0.9230\n",
      "Epoch 60/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 93ms/step - loss: 0.2972 - acc: 0.9957 - val_loss: 0.5761 - val_acc: 0.9246\n",
      "Epoch 61/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 92ms/step - loss: 0.2917 - acc: 0.9966 - val_loss: 0.5735 - val_acc: 0.9225\n",
      "Epoch 62/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 91ms/step - loss: 0.2876 - acc: 0.9963 - val_loss: 0.5752 - val_acc: 0.9232\n",
      "Epoch 63/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 92ms/step - loss: 0.2835 - acc: 0.9967 - val_loss: 0.5730 - val_acc: 0.9248\n",
      "Epoch 64/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 92ms/step - loss: 0.2794 - acc: 0.9971 - val_loss: 0.5713 - val_acc: 0.9250\n",
      "Epoch 65/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 28s 91ms/step - loss: 0.2752 - acc: 0.9971 - val_loss: 0.5692 - val_acc: 0.9257\n",
      "Epoch 66/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 92ms/step - loss: 0.2719 - acc: 0.9970 - val_loss: 0.5713 - val_acc: 0.9251\n",
      "Epoch 67/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 92ms/step - loss: 0.2671 - acc: 0.9978 - val_loss: 0.5697 - val_acc: 0.9282\n",
      "Epoch 68/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.2638 - acc: 0.9974 - val_loss: 0.5640 - val_acc: 0.9273\n",
      "Epoch 69/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 94ms/step - loss: 0.2601 - acc: 0.9983 - val_loss: 0.5689 - val_acc: 0.9256\n",
      "Epoch 70/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 95ms/step - loss: 0.2563 - acc: 0.9982 - val_loss: 0.5668 - val_acc: 0.9262\n",
      "Epoch 71/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 93ms/step - loss: 0.2531 - acc: 0.9985 - val_loss: 0.5651 - val_acc: 0.9276\n",
      "Epoch 72/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 28s 90ms/step - loss: 0.2491 - acc: 0.9985 - val_loss: 0.5636 - val_acc: 0.9270\n",
      "Epoch 73/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 94ms/step - loss: 0.2471 - acc: 0.9981 - val_loss: 0.5567 - val_acc: 0.9255\n",
      "Epoch 74/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 31s 99ms/step - loss: 0.2437 - acc: 0.9985 - val_loss: 0.5556 - val_acc: 0.9273\n",
      "Epoch 75/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 97ms/step - loss: 0.2400 - acc: 0.9984 - val_loss: 0.5501 - val_acc: 0.9271\n",
      "Epoch 76/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 97ms/step - loss: 0.2372 - acc: 0.9986 - val_loss: 0.5494 - val_acc: 0.9268\n",
      "Epoch 77/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 31s 98ms/step - loss: 0.2334 - acc: 0.9990 - val_loss: 0.5557 - val_acc: 0.9260\n",
      "Epoch 78/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 31s 98ms/step - loss: 0.2310 - acc: 0.9988 - val_loss: 0.5499 - val_acc: 0.9268\n",
      "Epoch 79/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 31s 99ms/step - loss: 0.2276 - acc: 0.9989 - val_loss: 0.5589 - val_acc: 0.9254\n",
      "Epoch 80/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.2252 - acc: 0.9985 - val_loss: 0.5506 - val_acc: 0.9259\n",
      "Epoch 81/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.2224 - acc: 0.9987 - val_loss: 0.5510 - val_acc: 0.9258\n",
      "Epoch 82/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 95ms/step - loss: 0.2186 - acc: 0.9992 - val_loss: 0.5504 - val_acc: 0.9254\n",
      "Epoch 83/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 29s 94ms/step - loss: 0.2154 - acc: 0.9994 - val_loss: 0.5527 - val_acc: 0.9262\n",
      "Epoch 84/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.2137 - acc: 0.9989 - val_loss: 0.5471 - val_acc: 0.9251\n",
      "Epoch 85/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 95ms/step - loss: 0.2107 - acc: 0.9990 - val_loss: 0.5541 - val_acc: 0.9261\n",
      "Epoch 86/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.2075 - acc: 0.9996 - val_loss: 0.5476 - val_acc: 0.9260\n",
      "Epoch 87/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 95ms/step - loss: 0.2047 - acc: 0.9994 - val_loss: 0.5462 - val_acc: 0.9248\n",
      "Epoch 88/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 94ms/step - loss: 0.2026 - acc: 0.9993 - val_loss: 0.5453 - val_acc: 0.9247\n",
      "Epoch 89/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 95ms/step - loss: 0.2006 - acc: 0.9991 - val_loss: 0.5422 - val_acc: 0.9257\n",
      "Epoch 90/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 30s 96ms/step - loss: 0.1975 - acc: 0.9995 - val_loss: 0.5448 - val_acc: 0.9250\n",
      "Epoch 91/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 34s 107ms/step - loss: 0.1954 - acc: 0.9993 - val_loss: 0.5397 - val_acc: 0.9269\n",
      "Epoch 92/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 55s 176ms/step - loss: 0.1929 - acc: 0.9994 - val_loss: 0.5438 - val_acc: 0.9260\n",
      "Epoch 93/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 55s 177ms/step - loss: 0.1906 - acc: 0.9993 - val_loss: 0.5429 - val_acc: 0.9239\n",
      "Epoch 94/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1885 - acc: 0.9991 - val_loss: 0.5454 - val_acc: 0.9258\n",
      "Epoch 95/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1857 - acc: 0.9994 - val_loss: 0.5383 - val_acc: 0.9273\n",
      "Epoch 96/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1836 - acc: 0.9994 - val_loss: 0.5376 - val_acc: 0.9275\n",
      "Epoch 97/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1808 - acc: 0.9995 - val_loss: 0.5387 - val_acc: 0.9271\n",
      "Epoch 98/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1790 - acc: 0.9994 - val_loss: 0.5383 - val_acc: 0.9267\n",
      "Epoch 99/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1767 - acc: 0.9995 - val_loss: 0.5347 - val_acc: 0.9281\n",
      "Epoch 100/200\n",
      "new lr:1.00e-02\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1742 - acc: 0.9995 - val_loss: 0.5361 - val_acc: 0.9258\n",
      "Epoch 101/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1732 - acc: 0.9994 - val_loss: 0.5339 - val_acc: 0.9265\n",
      "Epoch 102/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1724 - acc: 0.9997 - val_loss: 0.5326 - val_acc: 0.9271\n",
      "Epoch 103/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1724 - acc: 0.9996 - val_loss: 0.5314 - val_acc: 0.9272\n",
      "Epoch 104/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1721 - acc: 0.9995 - val_loss: 0.5317 - val_acc: 0.9270\n",
      "Epoch 105/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1718 - acc: 0.9997 - val_loss: 0.5299 - val_acc: 0.9272\n",
      "Epoch 106/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1714 - acc: 0.9997 - val_loss: 0.5303 - val_acc: 0.9275\n",
      "Epoch 107/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1711 - acc: 0.9997 - val_loss: 0.5303 - val_acc: 0.9272\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 108/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1709 - acc: 0.9997 - val_loss: 0.5291 - val_acc: 0.9277\n",
      "Epoch 109/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1708 - acc: 0.9997 - val_loss: 0.5296 - val_acc: 0.9276\n",
      "Epoch 110/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1707 - acc: 0.9995 - val_loss: 0.5291 - val_acc: 0.9277\n",
      "Epoch 111/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1702 - acc: 0.9997 - val_loss: 0.5285 - val_acc: 0.9280\n",
      "Epoch 112/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1701 - acc: 0.9996 - val_loss: 0.5278 - val_acc: 0.9276\n",
      "Epoch 113/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1700 - acc: 0.9997 - val_loss: 0.5275 - val_acc: 0.9280\n",
      "Epoch 114/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1696 - acc: 0.9996 - val_loss: 0.5273 - val_acc: 0.9275\n",
      "Epoch 115/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1696 - acc: 0.9996 - val_loss: 0.5281 - val_acc: 0.9274\n",
      "Epoch 116/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1690 - acc: 0.9998 - val_loss: 0.5283 - val_acc: 0.9275\n",
      "Epoch 117/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1688 - acc: 0.9999 - val_loss: 0.5276 - val_acc: 0.9279\n",
      "Epoch 118/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1684 - acc: 0.9999 - val_loss: 0.5272 - val_acc: 0.9282\n",
      "Epoch 119/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1686 - acc: 0.9997 - val_loss: 0.5273 - val_acc: 0.9283\n",
      "Epoch 120/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1681 - acc: 0.9998 - val_loss: 0.5273 - val_acc: 0.9279\n",
      "Epoch 121/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1680 - acc: 0.9998 - val_loss: 0.5273 - val_acc: 0.9286\n",
      "Epoch 122/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1680 - acc: 0.9996 - val_loss: 0.5267 - val_acc: 0.9283\n",
      "Epoch 123/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1676 - acc: 0.9998 - val_loss: 0.5263 - val_acc: 0.9284\n",
      "Epoch 124/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1678 - acc: 0.9996 - val_loss: 0.5247 - val_acc: 0.9280\n",
      "Epoch 125/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1671 - acc: 0.9997 - val_loss: 0.5250 - val_acc: 0.9290\n",
      "Epoch 126/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1668 - acc: 0.9998 - val_loss: 0.5243 - val_acc: 0.9279\n",
      "Epoch 127/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1666 - acc: 0.9997 - val_loss: 0.5236 - val_acc: 0.9282\n",
      "Epoch 128/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1663 - acc: 0.9998 - val_loss: 0.5230 - val_acc: 0.9278\n",
      "Epoch 129/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1661 - acc: 0.9998 - val_loss: 0.5229 - val_acc: 0.9283\n",
      "Epoch 130/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1664 - acc: 0.9996 - val_loss: 0.5230 - val_acc: 0.9286\n",
      "Epoch 131/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1657 - acc: 0.9998 - val_loss: 0.5230 - val_acc: 0.9291\n",
      "Epoch 132/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 182ms/step - loss: 0.1656 - acc: 0.9998 - val_loss: 0.5234 - val_acc: 0.9287\n",
      "Epoch 133/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1653 - acc: 0.9998 - val_loss: 0.5231 - val_acc: 0.9293\n",
      "Epoch 134/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 182ms/step - loss: 0.1652 - acc: 0.9997 - val_loss: 0.5227 - val_acc: 0.9287\n",
      "Epoch 135/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1651 - acc: 0.9997 - val_loss: 0.5228 - val_acc: 0.9287\n",
      "Epoch 136/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1649 - acc: 0.9998 - val_loss: 0.5219 - val_acc: 0.9292\n",
      "Epoch 137/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 183ms/step - loss: 0.1644 - acc: 0.9998 - val_loss: 0.5226 - val_acc: 0.9292\n",
      "Epoch 138/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 58s 184ms/step - loss: 0.1643 - acc: 0.9999 - val_loss: 0.5223 - val_acc: 0.9289\n",
      "Epoch 139/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 183ms/step - loss: 0.1643 - acc: 0.9998 - val_loss: 0.5214 - val_acc: 0.9289\n",
      "Epoch 140/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 183ms/step - loss: 0.1640 - acc: 0.9998 - val_loss: 0.5219 - val_acc: 0.9289\n",
      "Epoch 141/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 183ms/step - loss: 0.1639 - acc: 0.9997 - val_loss: 0.5221 - val_acc: 0.9287\n",
      "Epoch 142/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1635 - acc: 0.9998 - val_loss: 0.5218 - val_acc: 0.9292\n",
      "Epoch 143/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1633 - acc: 0.9998 - val_loss: 0.5217 - val_acc: 0.9288\n",
      "Epoch 144/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1629 - acc: 0.9999 - val_loss: 0.5225 - val_acc: 0.9287\n",
      "Epoch 145/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1628 - acc: 0.9998 - val_loss: 0.5232 - val_acc: 0.9290\n",
      "Epoch 146/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1629 - acc: 0.9997 - val_loss: 0.5220 - val_acc: 0.9287\n",
      "Epoch 147/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 182ms/step - loss: 0.1626 - acc: 0.9997 - val_loss: 0.5223 - val_acc: 0.9281\n",
      "Epoch 148/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1620 - acc: 0.9999 - val_loss: 0.5212 - val_acc: 0.9284\n",
      "Epoch 149/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1619 - acc: 0.9998 - val_loss: 0.5216 - val_acc: 0.9286\n",
      "Epoch 150/200\n",
      "new lr:1.00e-03\n",
      "313/313 [==============================] - 57s 183ms/step - loss: 0.1619 - acc: 0.9998 - val_loss: 0.5209 - val_acc: 0.9281\n",
      "Epoch 151/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 57s 182ms/step - loss: 0.1617 - acc: 0.9998 - val_loss: 0.5213 - val_acc: 0.9284\n",
      "Epoch 152/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1618 - acc: 0.9998 - val_loss: 0.5210 - val_acc: 0.9282\n",
      "Epoch 153/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1616 - acc: 0.9998 - val_loss: 0.5205 - val_acc: 0.9283\n",
      "Epoch 154/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1616 - acc: 0.9999 - val_loss: 0.5212 - val_acc: 0.9282\n",
      "Epoch 155/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1614 - acc: 0.9999 - val_loss: 0.5204 - val_acc: 0.9284\n",
      "Epoch 156/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1615 - acc: 0.9999 - val_loss: 0.5213 - val_acc: 0.9281\n",
      "Epoch 157/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1616 - acc: 0.9999 - val_loss: 0.5211 - val_acc: 0.9284\n",
      "Epoch 158/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1616 - acc: 0.9997 - val_loss: 0.5207 - val_acc: 0.9286\n",
      "Epoch 159/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1614 - acc: 0.9998 - val_loss: 0.5211 - val_acc: 0.9283\n",
      "Epoch 160/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1614 - acc: 0.9999 - val_loss: 0.5210 - val_acc: 0.9281\n",
      "Epoch 161/200\n",
      "new lr:1.00e-04\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "313/313 [==============================] - 55s 177ms/step - loss: 0.1615 - acc: 0.9998 - val_loss: 0.5209 - val_acc: 0.9283\n",
      "Epoch 162/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1614 - acc: 0.9998 - val_loss: 0.5208 - val_acc: 0.9285\n",
      "Epoch 163/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1613 - acc: 0.9998 - val_loss: 0.5210 - val_acc: 0.9283\n",
      "Epoch 164/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1616 - acc: 0.9997 - val_loss: 0.5206 - val_acc: 0.9286\n",
      "Epoch 165/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1614 - acc: 0.9997 - val_loss: 0.5208 - val_acc: 0.9282\n",
      "Epoch 166/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1613 - acc: 0.9998 - val_loss: 0.5208 - val_acc: 0.9286\n",
      "Epoch 167/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1612 - acc: 0.9999 - val_loss: 0.5207 - val_acc: 0.9284\n",
      "Epoch 168/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1611 - acc: 0.9999 - val_loss: 0.5204 - val_acc: 0.9288\n",
      "Epoch 169/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1614 - acc: 0.9997 - val_loss: 0.5208 - val_acc: 0.9284\n",
      "Epoch 170/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1611 - acc: 1.0000 - val_loss: 0.5201 - val_acc: 0.9283\n",
      "Epoch 171/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1614 - acc: 0.9998 - val_loss: 0.5208 - val_acc: 0.9282\n",
      "Epoch 172/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1612 - acc: 0.9998 - val_loss: 0.5205 - val_acc: 0.9283\n",
      "Epoch 173/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1613 - acc: 0.9998 - val_loss: 0.5204 - val_acc: 0.9283\n",
      "Epoch 174/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1611 - acc: 0.9999 - val_loss: 0.5201 - val_acc: 0.9284\n",
      "Epoch 175/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1612 - acc: 0.9998 - val_loss: 0.5203 - val_acc: 0.9284\n",
      "Epoch 176/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1610 - acc: 0.9998 - val_loss: 0.5210 - val_acc: 0.9278\n",
      "Epoch 177/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1610 - acc: 0.9999 - val_loss: 0.5206 - val_acc: 0.9284\n",
      "Epoch 178/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1611 - acc: 0.9999 - val_loss: 0.5206 - val_acc: 0.9281\n",
      "Epoch 179/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 55s 177ms/step - loss: 0.1612 - acc: 0.9997 - val_loss: 0.5205 - val_acc: 0.9284\n",
      "Epoch 180/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1610 - acc: 0.9999 - val_loss: 0.5205 - val_acc: 0.9284\n",
      "Epoch 181/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1611 - acc: 0.9999 - val_loss: 0.5206 - val_acc: 0.9285\n",
      "Epoch 182/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1610 - acc: 0.9999 - val_loss: 0.5204 - val_acc: 0.9282\n",
      "Epoch 183/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1608 - acc: 0.9999 - val_loss: 0.5204 - val_acc: 0.9283\n",
      "Epoch 184/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1611 - acc: 0.9999 - val_loss: 0.5210 - val_acc: 0.9284\n",
      "Epoch 185/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1607 - acc: 1.0000 - val_loss: 0.5202 - val_acc: 0.9280\n",
      "Epoch 186/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1610 - acc: 0.9998 - val_loss: 0.5207 - val_acc: 0.9280\n",
      "Epoch 187/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1608 - acc: 0.9998 - val_loss: 0.5204 - val_acc: 0.9287\n",
      "Epoch 188/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1608 - acc: 0.9998 - val_loss: 0.5206 - val_acc: 0.9282\n",
      "Epoch 189/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1609 - acc: 0.9998 - val_loss: 0.5207 - val_acc: 0.9285\n",
      "Epoch 190/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1609 - acc: 0.9998 - val_loss: 0.5205 - val_acc: 0.9284\n",
      "Epoch 191/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1611 - acc: 0.9998 - val_loss: 0.5210 - val_acc: 0.9285\n",
      "Epoch 192/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1608 - acc: 0.9998 - val_loss: 0.5208 - val_acc: 0.9280\n",
      "Epoch 193/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1608 - acc: 0.9999 - val_loss: 0.5208 - val_acc: 0.9284\n",
      "Epoch 194/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1608 - acc: 0.9998 - val_loss: 0.5206 - val_acc: 0.9283\n",
      "Epoch 195/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 57s 181ms/step - loss: 0.1608 - acc: 0.9999 - val_loss: 0.5203 - val_acc: 0.9282\n",
      "Epoch 196/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 180ms/step - loss: 0.1606 - acc: 0.9999 - val_loss: 0.5200 - val_acc: 0.9284\n",
      "Epoch 197/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1607 - acc: 0.9999 - val_loss: 0.5206 - val_acc: 0.9282\n",
      "Epoch 198/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 178ms/step - loss: 0.1606 - acc: 0.9999 - val_loss: 0.5200 - val_acc: 0.9285\n",
      "Epoch 199/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1606 - acc: 0.9998 - val_loss: 0.5199 - val_acc: 0.9286\n",
      "Epoch 200/200\n",
      "new lr:1.00e-04\n",
      "313/313 [==============================] - 56s 179ms/step - loss: 0.1607 - acc: 0.9998 - val_loss: 0.5209 - val_acc: 0.9279\n",
      "CPU times: user 3h 22min 47s, sys: 24min 26s, total: 3h 47min 14s\n",
      "Wall time: 2h 46min 5s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "from cifar10_solver import *\n",
    "from keras.callbacks import ReduceLROnPlateau\n",
    "from keras.callbacks import LearningRateScheduler\n",
    "\n",
    "def lr_scheduler(epoch):\n",
    "    new_lr = lr * (0.1 ** (epoch // 50))\n",
    "    print('new lr:%.2e' % new_lr)\n",
    "    return new_lr \n",
    "\n",
    "reduce_lr = LearningRateScheduler(lr_scheduler)\n",
    "# reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1,\n",
    "#                               patience=10, min_lr=1e-6, verbose=1)\n",
    "\n",
    "solver = CIFAR10Solver(resnet18, data)\n",
    "history = solver.train(epochs=200, batch_size=128, data_augmentation=True, callbacks=[reduce_lr])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot loss and acc \n",
    "plot_history(history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 18s 2ms/step\n",
      "test data loss:0.56 acc:0.9216\n"
     ]
    }
   ],
   "source": [
    "solver.test()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
